package _98综合练习;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;



// 完善学生管理系统
// 要求:
// 1. 要使用面向对象
// 2. 要使用集合容器
// 3. 要使用IO实现数据的保存 (选择一种流:字符流、数据流、对象流)

// 实现保存的功能
// 1. 开始运行时读入之前存档，放入集合容器(先判断文件是否存在，如果存在则读入)
// 2. 每次添加和删除修改时，保存一下，覆盖之前的文件

// 菜单
// 1. 添加学生信息
// 2. 删除学生信息
// 3. 列表学生信息
// 4. 退出

public class Exercise1 {

    static boolean run = true;
    static ArrayList<Student> arrayList = new ArrayList<Student>();
    static String path = "D:\\StuInfo.txt";
    static File file = new File(path);
    static ObjectOutputStream oos;
    static ObjectInputStream ois;
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        // 初始化学生信息，读入学生信息
        if (!initializationInfo()) {
            // 如果文件不存在，则创建
            File f1 = new File(path);
            f1.createNewFile();

        } else {
            FileInputStream fs = new FileInputStream(path);
            byte[] by = new byte[1024];
            int size = fs.available();
            // 判断内容是否为空
            if (size == 0) {
                System.out.println("当前文件内容为空");
                // 如果文件存在且不为空，则开始读取，将读到的内容添加到集合框架中
            } else {
                readContent();
            }

        }

        while (run) {
            System.out.println("========学生管理系统========");
            System.out.println("        1. 添加学生信息");
            System.out.println("        2. 删除学生信息");
            System.out.println("        3. 列表学生信息");
            System.out.println("        4. 退出");
            System.out.print("请输入功能：");
            try {
                int Function = sc.nextInt();
                switchDemo(Function);
            } catch (Exception e) {
                sc.nextLine();
                System.out.println("main() Exception");
            }
        }
    }

    private static void readContent() throws FileNotFoundException, IOException, ClassNotFoundException {

        try {
            ois = new ObjectInputStream(new FileInputStream(path));

            // 赋值给集合框架
            arrayList = (ArrayList<Student>) ois.readObject();
            // 判断文件内容是否为空
            if (arrayList != null) {
//				System.out.println(arrayList);
                // 查看文件内学生信息
                for (Student stu : arrayList) {
                    System.out.println(stu);
                }

            } else {
                System.out.println("当前文件内容为空！");
            }

        } catch (Exception e) {
            System.out.println("readContent() Exception");
        } finally {
            ois.close();
        }
    }

    private static boolean initializationInfo() throws IOException {

        // (先判断文件是否存在，如果存在则读入)
        if (file.exists()) {
            return true;

        } else {
            System.out.println("文件不存在！已创建");
            return false;
        }
    }

    private static void switchDemo(int function) throws IOException {
        try {
            switch (function) {
                case 1:
                    System.out.println("@添加学生信息@");
                    addInfo();
                    break;
                case 2:
                    System.out.println("@删除学生信息@");
                    deleteInfo();
                    break;
                case 3:
                    System.out.println("@列表学生信息@");
                    printInfo();
                    break;
                case 4:
                    System.out.println("@退出@");
                    run = false;
                    break;

                default:
            }

        } catch (Exception e) {
            System.out.println("switchDemo() Exception");
        }
    }

    private static void printInfo() {

        for (Student stu : arrayList) {
            System.out.println(stu);
        }
    }

    private static void deleteInfo() throws IOException {
        try {
            System.out.print("请输入要删除的学生的学号：");
            String id = sc.nextInt() + "";

            StringBuilder sb;
            int index = 0;

            for (Student stu : arrayList) {
                sb = new StringBuilder();
                sb.append(stu);
                String stuId = sb.substring(0, sb.indexOf("."));
//				System.out.println("学号：" + stuId);
                if (stuId.equals(id)) {
                    System.out.println("您要删除的学生信息为：" + arrayList.get(index));
                    arrayList.remove(index);
                } else {
                    index++;
                }
            }
            // 从集合框架中删除后，将集合框架中的内容写到文件中
            oos = new ObjectOutputStream(new FileOutputStream(path));
            oos.writeObject(arrayList);

        } catch (Exception e) {
            System.out.println("deleteInfo Exception");
            sc.nextLine();

        } finally {
            oos.close();
        }
    }

    private static void addInfo() throws IOException {
        try {
            System.out.print("请输入学号：");
            int id = sc.nextInt();
            System.out.print("请输入姓名：");
            String name = sc.next();
            System.out.print("请输入语文成绩：");
            int cNS = sc.nextInt();
            System.out.print("请输入数学成绩：");
            int mSS = sc.nextInt();
            System.out.print("请输入英语成绩：");
            int eNS = sc.nextInt();

            // 将学生信息添加到集合框架
            arrayList.add(new Student(id, name, cNS, mSS, eNS));
            // 创建输出流，将集合框架的内容写入到文件内
            oos = new ObjectOutputStream(new FileOutputStream(path));
            oos.writeObject(arrayList);

        } catch (Exception e) {
            System.out.println("addInfo() Exception");
            sc.nextLine();

        } finally {
            oos.close();
        }
    }

}